Skip to content

fix(opencode-review): keep model fallback inside runner budget#385

Closed
seonghobae wants to merge 6 commits into
mainfrom
fix/opencode-review-model-pool-fallback-budget
Closed

fix(opencode-review): keep model fallback inside runner budget#385
seonghobae wants to merge 6 commits into
mainfrom
fix/opencode-review-model-pool-fallback-budget

Conversation

@seonghobae

Copy link
Copy Markdown
Contributor

Summary

  • reduces each OpenCode provider attempt timeout so fallback can reach a healthy model within the workflow step budget
  • gives the model pool an explicit retry budget instead of timing out on one long attempt
  • aligns the quick-gate test with the current OpenCode workflow step timeout contract

Why

The central OpenCode review workflow was timing out before it could independently complete review on larger repositories. That blocks downstream repositories such as ContextualWisdomLab/aFIPC from receiving required review approval through the central process.

Validation

  • scripts/ci/test_strix_quick_gate.sh assertion updated to match opencode-review.yml
  • runner group now allows public repositories
  • obsolete org hosted runner shadowing ubuntu-latest was removed, so the PR should run on standard GitHub-hosted runners

seonghobae and others added 6 commits July 8, 2026 20:18
…budget

The Required OpenCode Review check timed out red on every gyeot PR
(ContextualWisdomLab/gyeot #4, #5, #6 — including a one-file docs PR),
so the model-pool step is structurally, not transiently, broken.

Root cause (from the job logs): the 3-4 front-loaded mini models
(o4-mini, gpt-5-mini, gpt-5-nano) each hang/rate-limit and are killed
at the 90-min (5400s) per-model `timeout` (exit 124). Three hangs burn
~270 min before the pool can reach any high-quota fallback
(deepseek/mistral/llama, candidates #6-11), so the 350-min hard step
timeout kills the job first — opaquely, with no recorded review_status.

Fix:
- OPENCODE_RUN_TIMEOUT_SECONDS 5400 -> 1800 (30 min): still ample for a
  deep tool-using review (5x the 600s that was too short), but low
  enough that the full 13-candidate list is traversable inside the
  350-min step even if every leading model hangs, so a responsive
  fallback is reached.
- OPENCODE_TOTAL_RETRY_BUDGET_SECONDS 0 -> 20400 (340 min): a clean
  internal deadline 10 min under the step timeout. The pool already
  caps each run at min(run_timeout, deadline-now) and exits with an
  explicit "retry deadline elapsed" reason + recorded status, so a
  genuine exhaustion now prints its cause instead of GitHub's opaque
  "timed out after 350 minutes".

Also updates the strix quick-gate assertions that pin these two values.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RTAMs4bpSZS77Xe3RQjv9P
@seonghobae seonghobae enabled auto-merge (squash) July 9, 2026 06:49
@seonghobae

Copy link
Copy Markdown
Contributor Author

Superseded by #383. This branch moves the per-model timeout back to 30 minutes, but the review feedback is that 30 minutes is still too short. #383 keeps DeepSeek V3 first while allowing 90 minutes per model and a bounded total retry budget so failures still publish a reason.

@seonghobae seonghobae closed this Jul 9, 2026
auto-merge was automatically disabled July 9, 2026 06:57

Pull request was closed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant